---@class GT.music
GT.music = class()

---@class play_sound 播放音乐
---@field role GT.player 玩家
---@field sid AudioKey 乐曲编号
---@field loop Bool 是否循环 默认 false
---@field fade_in_time Float 淡入时间 默认 0
---@field fade_out_time Float 淡出时间 默认 0

--- 播放音乐
---@param data play_sound
function GT.music.play_sound(data)
    game_api.play_sound_for_player(data.role.player, data.sid, data.loop or false, data.fade_in_time or 0, data.fade_out_time or 0)
end

--- 对目标播放音乐
---@param unit_key UnitKey 单位编号
---@param camp_target RoleRelation 玩家关系
---@param sid AudioKey 乐曲编号
---@param loop Bool 是否循环
function GT.music.play_sound_for_role_relation(unit_key, camp_target, sid, loop)
    game_api.play_sound_for_role_relation(unit_key, camp_target, sid, loop)
end

--- 播放3d音乐
---@param role GT.player 玩家
---@param sid AudioKey 乐曲编号
---@param position GT.point 播放位置
---@param height Float 高度
---@param fade_in_time Bool 是否循环
---@param fade_out_time Float 淡入时间
---@param ensure_play Float 淡出时间
---@param loop Bool 确保播放
function GT.music.play_3d_sound_for_player(role, sid, position, height, fade_in_time, fade_out_time, ensure_play, loop)
    game_api.play_3d_sound_for_player(role.player, sid, position.point, height, fade_in_time, fade_out_time, ensure_play, loop)
end

---@class play_3d_sound_unit 单位播放3d音乐
---@field role GT.player 玩家
---@field sid AudioKey 乐曲编号
---@field unit GT.unit 单位
---@field fade_in_time Bool 是否循环 默认 false
---@field fade_out_time Float 淡入时间 默认 0
---@field ensure_play Float 淡出时间 默认 0
---@field loop Bool 确保播放 默认 true

---@see string 有问题 声音正常播放 会报错 等待修复
--- 跟随单位播放3d音乐
---@param data play_3d_sound_unit
function GT.music.sound_3d_unit(data)
   return game_api.follow_object_play_3d_sound_for_player(data.role.player, data.sid, data.unit.unit, data.fade_in_time or false, Fix32(data.fade_out_time or 0),Fix32(data.ensure_play or 0) , data.loop or true)
end





--- 停止播放音乐
---@param role GT.player  玩家
---@param sound SoundEntity 声音
---@param immediately_stop Bool 是否立即停止
function GT.music.stop_sound(role, sound, immediately_stop)
    game_api.stop_sound(role.player, sound, immediately_stop)
end
